home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy002 / files / articulo.003 < prev    next >
Encoding:
Text File  |  1997-01-27  |  3.4 KB  |  66 lines

  1. *cN                               Low Level (II)
  2. *cG
  3.   Seguro que alguna vez has visto una pequeña demo que se incluye junto a un
  4. montón de programas y que es la marca inconfundible de que ese fichero ha sido
  5. extraido de la*cO BBS BlasterSound*cG. Por si no lo has visto (o no lo recuerdas),
  6. se trata de una intro donde van apareciendo los típicos mensajes de la BBS a
  7. la vez que está nevando (virtualmente, claro).
  8.   El efecto es sensacional ya que usa un modo gráfico de 640x400 (más o menos)
  9. y los copos de nieve no caen como piedras, sino que se dejan llevar. En este
  10. número aprenderemos a hacer este bonito efecto con el modo 13h y cargando un
  11. fichero RAW en pantalla para ver mejor como se amontonan los copos.
  12.   El código fuente lo encontrareis en el directorio 'lowlevel' y está pensado
  13. para usarse con el*cO Turbo Assembler v1.0 *cGasí que seguro que lo puedes ensamblar
  14. con cualquier otro. Usa las directivas simplificadas y está pensado para ser
  15. un archivo COM (el fichero que encontrarás ya compilado está comprimido con el
  16. *cOPK-LITE*cG para ocupar menos).
  17.   La primera función que nos encontramos es la típica Wait for Vertical
  18. Retrace que espera, como su nombre indica, el próximo retrazado vertical de
  19. la tarjeta de video. Esto nos servirá para dos cosas: primero para sincronizar
  20. la velocidad del programa con la tarjeta (un retrazado se produce cada 1/70
  21. segundos); y luego para que no se produzca el desagradable efecto que vemos
  22. en los malos juegos cuando salen sprites, el parpadeo de la imagen.
  23. *cJ
  24. WaitVR          PROC    NEAR
  25.                 PUSH    DX              ;  Preserva los registros.
  26.                 PUSH    AX
  27.                 MOV     DX, 03DAh
  28.         @@St1:  IN      AL, DX          ;  Espera a que termine el retrazo.
  29.                 TEST    AL, 08h
  30.                 JZ    @@St1
  31.         @@St2:  IN      AL, DX          ;  Espera a que empieze el nuevo.
  32.                 TEST    AL, 08h
  33.                 JNZ   @@St2
  34.                 POP     AX 
  35.                 POP     DX
  36.                 RET
  37. WaitVR          ENDP
  38. *cG
  39.   Otra función interesante es *cCRandom*cG. Se encarga de proporcionarnos números
  40. pseudo-aleatorios a partir de 3 variables que modifica según unas reglas
  41. matemáticas (escogidas de forma totalmente aleatoria) y nos permite así que
  42. los copos no caigan uniformemente.
  43. *cJ
  44. Random          PROC    NEAR            ;  Hacemos unas cuantas tonterias
  45.                 MOV     AX, CS:[Rand1]  ; con los números para barajarlos lo
  46.                 ROL     AX, 2           ; mejor posible.
  47.                 ADD     AX, CS:[Rand2]
  48.                 SUB     CS:[Rand1], AX
  49.                 ROR     AX, 3
  50.                 XOR     AX, CS:[Rand3]
  51.                 ADD     CS:[Rand2], AX
  52.                 ROR     AX, 1
  53.                 XOR     CS:[Rand3], AX
  54.                 RET
  55. Random          ENDP
  56. *cG
  57.   El procedimiento principal se llama *cCnevada*cG y está sobradamente comentado
  58. y el *cCmain*cG no hace falta ni eso ya que sólo se encarga de ir llamando a las
  59. funciones de inicialización y luego llama a *cCnevada*cG. Seguramente os llamará
  60. la atención el hecho de que se  dibujen dos líneas verticales a los lados de
  61. la pantalla en el *cCmain*cG; eso es  para evitar que los copos que estén en los
  62. pixels donde *cOx=320*cG aparezcan por la siguiente línea (a la izquierda).
  63. *cL
  64.                                                           Navi Dj.
  65.  
  66.